import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserProfileAPI, getUserInfoAPI } from '@/api'

// 用户模块
const getDefaultState = () => {
  return {
    token: getToken(), // token字符串(不带Bearer前缀的)
    userInfo: {} // 用户信息对象
  }
}

const state = getDefaultState()

const mutations = {
  // 重置state
  RESET_STATE: (state) => {
    removeToken()
    Object.assign(state, getDefaultState())
  },
  // 保存token
  SET_TOKEN(state, val) {
    state.token = val
    setToken(val)
  },
  // 保存用户信息
  SET_USER(state, val) {
    state.userInfo = val
  }
}

const actions = {
  // 登录
  async loginActions({ commit }, loginForm) {
    // return new Promise((resolve, reject) => {
    //   loginAPI(loginForm).then(res => {
    //     commit('SET_TOKEN', res.data)
    //     resolve(res)
    //   }).catch(err => {
    //     reject(err)
    //   })
    // })
    try {
      const res = await loginAPI(loginForm)
      commit('SET_TOKEN', res.data)
      return res
    } catch (err) {
      // 等价于
      /**
       * return new Promise((resolve, reject) => {
       *  reject(err)
       * })
       */
      return Promise.reject(err)
    }
  },
  // 获取用户信息
  async getUserInfoActions({ commit }) {
    // 因为后台这个接口无需额外的参数, 所以不需要逻辑页面调用actions传参
    const res = await getUserProfileAPI()
    const res2 = await getUserInfoAPI(res.data.userId)
    console.log(res)
    console.log(res2)
    commit('SET_USER', { ...res.data, ...res2.data }) // res后台返回真正对象, 里data属性值(用户信息对象)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

